package testes;

import static org.junit.Assert.*;



import java.util.SortedSet;
import java.util.TreeSet;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.quasar.copaPaises.businessLayer.CalendarDate;
import org.quasar.copaPaises.businessLayer.Campeonato;
import org.quasar.copaPaises.businessLayer.Cartao;
import org.quasar.copaPaises.businessLayer.Cidade;
import org.quasar.copaPaises.businessLayer.Clube;
import org.quasar.copaPaises.businessLayer.Continente;
import org.quasar.copaPaises.businessLayer.Equipa;
import org.quasar.copaPaises.businessLayer.Estadio;
import org.quasar.copaPaises.businessLayer.Golo;
import org.quasar.copaPaises.businessLayer.Grupo;
import org.quasar.copaPaises.businessLayer.Jogador;
import org.quasar.copaPaises.businessLayer.Jogo;
import org.quasar.copaPaises.businessLayer.Membro;
import org.quasar.copaPaises.businessLayer.Pais;
import org.quasar.copaPaises.businessLayer.Participacao;
import org.quasar.copaPaises.businessLayer.Participante;
import org.quasar.copaPaises.businessLayer.Treinador;

public class JogoTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
		 CalendarDate.allInstances.clear();
		  Campeonato.allInstances.clear();
		  Cartao.allInstances.clear();
		  Cidade.allInstances.clear();
		  Clube.allInstances.clear();
		  Continente.allInstances.clear();
		  Equipa.allInstances.clear();
		  Estadio.allInstances.clear();
		  Golo.allInstances.clear();
		  Grupo.allInstances.clear();
		  Jogador.allInstances.clear();
		  Jogo.allInstances.clear();
		  Membro.allInstances.clear();
		  Pais.allInstances.clear();
		  Participacao.allInstances.clear();
		  Participante.allInstances().clear();
		  Treinador.allInstances.clear();
	}

	@After
	public void tearDown() throws Exception {
		 CalendarDate.allInstances.clear();
		  Campeonato.allInstances.clear();
		  Cartao.allInstances.clear();
		  Cidade.allInstances.clear();
		  Clube.allInstances.clear();
		  Continente.allInstances.clear();
		  Equipa.allInstances.clear();
		  Estadio.allInstances.clear();
		  Golo.allInstances.clear();
		  Grupo.allInstances.clear();
		  Jogador.allInstances.clear();
		  Jogo.allInstances.clear();
		  Membro.allInstances.clear();
		  Pais.allInstances.clear();
		  Participacao.allInstances.clear();
		  Participante.allInstances().clear();
		  Treinador.allInstances.clear();
	}

	@Test
	public final void testJogo() {
		Jogo j = new Jogo();
		assertNotNull(j);
	}

	@Test
	public final void testJogoCalendarDateStringGrupoEstadio() {
		Jogo j = new Jogo(new CalendarDate(), "hora", new Grupo(),new Estadio());
		assertNotNull(j);
		assertNotNull(j.dia());
		assertNotNull(j.hora());
		assertNotNull(j.grupo());
		assertNotNull(j.estadio());
	
	}

	@Test
	public final void testDia() {
		CalendarDate d = new CalendarDate();
		Jogo j = new Jogo(d,null,null,null);
		assertSame(j.dia(),d);
	}

	@Test
	public final void testSetDia() {
		Jogo j = new Jogo();
		CalendarDate d = new CalendarDate();
		j.setDia(d);
		assertSame(j.dia(),d);
	}

	@Test
	public final void testHora() {
		String hora = "hora";
		Jogo j = new Jogo(null,hora,null,null);
		assertSame(j.hora(),hora);
	}

	@Test
	public final void testSetHora() {
		Jogo j = new Jogo();
		String hora = "hora";
		j.setHora(hora);
		assertSame(j.hora(),hora);
	}

	@Test
	public final void testGrupo() {
		Grupo grupo = new Grupo();
		Jogo j = new Jogo(null,null,grupo,null);
		assertSame(j.grupo(),grupo);
		
	}

	@Test
	public final void testSetGrupo() {
		Grupo grupo = new Grupo();
		Jogo j = new Jogo();
		j.setGrupo(grupo);
		assertSame(j.grupo(),grupo);
	}

	@Test
	public final void testEstadio() {
		Estadio estadio = new Estadio();
		Jogo j = new Jogo(null,null,null,estadio);
		assertSame(j.estadio(),estadio);
		
	}

	@Test
	public final void testSetEstadio() {
		Estadio estadio = new Estadio();
		Jogo j = new Jogo();
		j.setEstadio(estadio);
		assertSame(j.estadio(),estadio);
	}

	@Test
	public final void testEquipa() {
		Jogo j = new Jogo();
		TreeSet<Equipa> equipa = new TreeSet<Equipa>();
		j.setEquipa(equipa);
		assertEquals(j.equipa(),equipa);
	}

	@Test
	public final void testSetEquipa() {
		Jogo j = new Jogo();
		TreeSet<Equipa> equipa = new TreeSet<Equipa>();
		j.setEquipa(equipa);
		assertEquals(j.equipa(),equipa);
	}

	@Test
	public final void testSeleccao() {
		Jogo j = new Jogo();
		SortedSet<Pais> paises = new TreeSet<Pais>();
		Pais p1 = new Pais(); p1.setNome("Espanha");
		Equipa e1 = new Equipa(); e1.setJogo(j);
		paises.add(p1);

		j.setSeleccao(paises);
		assertEquals(j.seleccao(), paises);
	}

	@Test
	public final void testSetSeleccao() {
		Jogo j = new Jogo();
		TreeSet<Pais> paises = new TreeSet<Pais>();
		Pais p = new Pais();
		p.setNome("Portugal");
		paises.add(p);
		Equipa e = new Equipa();
		e.setJogo(j);
		j.setSeleccao(paises);
		assertNotNull(j.seleccao());
	}

	@Test
	public final void testToString() {
		
		Jogo j = new Jogo (new CalendarDate(),"hora",new Grupo() ,new Estadio());
		String toString = "Jogo [dia=CalendarDate [day=0, month=0, year=0]\n" +
				", hora=hora, grupo=Grupo [designacao=null, fase=null, campeonato=null]\n"+
						", estadio=Estadio [inauguracao=0, lotacao=0, nome=null, cidade=null]\n]\n";
						
		assertEquals(j.toString(),toString);
	}

}
